#include <bits/stdc++.h>
#define mem(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
const int mxn=1e5+10;
int n,m;
int aa[mxn],c[mxn],X[10];
int a[mxn];
string G[mxn];
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);

    ios::sync_with_stdio(0);

    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>aa[i];
    }
    for(int i=1;i<=m;i++){
        cin>>c[i];
    }
    sort(c+1,c+1+m);
    int K=0;
    while(pow(2,K)<n){
        K++;
    }
    for(int i=1;i<=n;i++){
        cin>>G[i];
    }
    int T;
    cin>>T;
    for(int i=1;i<=T;i++){
        cin>>X[0]>>X[1]>>X[2]>>X[3];
        for(int i=1;i<=n;i++){
            a[i]=aa[i]^X[i%4];
        }
        int ans=0;
//        for(int j=1;j<=m;j++){
//            if(c[j]==1){
//                ans++;
//                continue;
//            }
//            int k=0;
//            while(pow(2,k)<c[j]){
//                k++;
//            }
//            vector<int> v;
//            for(int ii=1;ii<=pow(2,k),ii++){
//                if(ii<=c[j]){
//                    v.push_back(a[ii]);
//                }
//                else{
//                    v.push_back(-1);
//                }
//            }
//            int tpk=k;
//            for(int kk=1;kk<=tpk+1;kk++){
//                for(int ii=1;ii<pow(2,k),ii+=2){
//                    if(G[kk][ii/2]=='1'){
//                        if(v[ii+1]==-1){
//                            v.push_back(-1);
//                        }
//                        else if(a[ii+1]>=kk){
//                            v.push_back(a[ii+1]);
//                        }
//                    }
//                    else{
//
//                    }
//                }
//                v.erase(v,v+pow(2,k));
//                k--;
//            }
        cout<<ans+1<<endl;
    }
    return 0;
}
